#include <iostream>
#include <string>
#include <Windows.h>
// 懒汉式
class Singleton
{
private:
    Singleton() {}// 将构造函数设为私有
    static Singleton* m_pInstance;
public:
    static Singleton* getInstance();
};

Singleton* Singleton::m_pInstance = NULL;// 初始化静态变量

Singleton *Singleton::getInstance()
{
    if(m_pInstance == NULL){
        m_pInstance = new Singleton;
    }
    return m_pInstance;
}


DWORD WINAPI ThreadFunc (LPVOID lpvThreadParm ){
    std::cout << Singleton::getInstance() << std::endl;
    return 0;
}

int main(int argc, char *argv[])
{
    for(int i = 0; i < 10000; ++i){
        HANDLE hThread;
        DWORD dwThreadId;

        // 创建线程,可能会输出不同的地址
        hThread = ::CreateThread(NULL,// 默认安全属性
            NULL, // 默认堆栈
            ThreadFunc,// 线程的入口函数
            NULL, // 默认的线程参数
            0, // 线程立即执行
            &dwThreadId); // 线程ID
    }

    return 0;
}


